#ifndef TABLESYMBOLES_H_
#define TABLESYMBOLES_H_

#include "SymboleValue.h"
#include <vector>
#include <iostream>
using namespace std;

/*! \file TableSymboles.h
    \brief La spécification de la classe TableSymboles
   
    Décrit la liste des méthodes et attributs associés aà la table des symboles, 
 * dans lesquels les symboles sont ranges.
    \author Fraisse A. & Froment J.
    \date 06/2012
 */

/*! \class TableSymboles
    \brief La classe représentant la table des symboles
   
 Cette classe TableSymboles est constitué des méthodes :
 *      *\li chercheAjoute (Symbole s)  
 */

class TableSymboles {
public:
    TableSymboles(); // Construit une table vide de pointeurs sur des symboles valués
    SymboleValue * chercheAjoute (Symbole s);
      // si s est identique à un symbole valué déjà présent dans la table,
      // on renvoie un pointeur sur ce symbole valué
      // Sinon on insère un nouveau symbole valué correspondant à s
      // et on renvoie un pointeur sur le nouveau symbole valué inséré

    friend ostream & operator << (ostream & cout, TableSymboles ts); // affiche ts sur cout

private:
    vector<SymboleValue *> table; // la table des symboles valués, triée sur la chaine
};

#endif /* TABLESYMBOLES_H_ */
